#ifndef DRV_TASK_H__
#define DRV_TASK_H__

#include "Z20K11xM_drv.h"
#include "Z20K11xM_clock.h"
#include "Z20K11xM_sysctrl.h"
#include "Z20K11xM_wdog.h"

#include <stdbool.h>
#include "stdint.h"
#include <string.h>

//---------------------------------------



//---------------------------------------


#define ACTUAL_OSC_FREQ      CLK_SRC_FIRC64M
#define SysTick_INT_MS       1U
// 任务状态标志位
typedef enum {
    TASK_ACTIVE   = 0x01,
    TASK_READY    = 0x02,
    TASK_OVERLOAD = 0x80
} eTaskStatus;

// 任务结构体
typedef struct {
    void (*handler)(void);  // 任务处理函数
    uint32_t interval;      // 执行间隔（ms）
    uint32_t last_exec;     // 上次执行时间戳
    uint32_t max_runtime;   // 最大允许执行时间（ms）
    uint32_t run_count;     // 执行计数器
    uint8_t status;         // 状态标志位
} sTask;





// 初始化任务调度器
void Scheduler_Init(void);

// 添加任务（动态注册）
bool Scheduler_AddTask(
    void (*task_handler)(void),
    uint32_t interval_ms,
    uint32_t max_runtime_ms
);

// 删除任务
bool Scheduler_RemoveTask(void (*task_handler)(void));

// 获取系统时间戳
uint32_t Scheduler_GetTick(void);

// 任务调度主函数
void Scheduler_Run(void);

ResultStatus_t SysTick_Init(void);

 // 系统初始化函数
 void Ex_Task_Init(void);

 void delay_ms(uint32_t ms);

    
 void LED_Task(void);
#endif

